package en.kaist.cs408.acav;

import java.util.ArrayList;
import java.util.Collections;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

public class BaseDeDonnees {

	DatabaseHelper	DBHelper;
	Context			context;
	StartCheck			conv;
    
	public static SQLiteDatabase	db;
	
	// constructeur de la classe basededonn�es
	public BaseDeDonnees(Context context){
		this.context = context;
		DBHelper = new DatabaseHelper(context);
	}

	// 
	public class DatabaseHelper extends SQLiteOpenHelper{

		Context			context;
		
		public DatabaseHelper(Context context) {
			super(context, "bdd_RecoVocale", null, 1);  //  <--- Numero de version : 1
			this.context = context;
		}


		//constructeur par d�faut avec creation de la table t_conversation
		@Override
		public void onCreate(SQLiteDatabase db) {
				db.execSQL("create table t_conversation (_id integer primary key autoincrement, "
						+ "							nomPatient text not null, "
						+ "							dateCourante text not null, "
						+ "							phrase text not null);");
			}

		//cette methode permet de mettre � jour la base de don�nes
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			Toast.makeText(context, "MAJ de la BDD : V."+oldVersion+" -> V."+newVersion, Toast.LENGTH_SHORT).show();
			db.execSQL("DROP TABLE IF EXISTS t_conversation");
			onCreate(db);
		}
	}

	//cette methode permet d'ouvrir la base de donn�es en la rendant lisible
	public BaseDeDonnees open(){
		db = DBHelper.getWritableDatabase();
		return this;
	}

	//cette methode permet de fermer la base de donn�es
	public void close(){
		db.close();
	}

	//cette methode permet de supprimer toutes les valeurs de la table t_conversation
	public void SupprimerDonnees_t_conversation(){
		db.execSQL("DELETE FROM t_conversation");
	}

	//cette methode permet de mettre a jour le nom d'un patient
	public void majNomDuPatient(String ancienNom, String nouveauNom){
		db.execSQL("UPDATE t_conversation SET nomPatient = '"+ nouveauNom +"' WHERE nomPatient = '"+ ancienNom +"'");  
	}

	//cette methode permet de supprimer un patient et toutes les conversations qui lui sont associ�s
	public static void supprimerUnPatient(String nomPatient) {
		db.execSQL("DELETE FROM t_conversation WHERE nomPatient = '"+ nomPatient +"'");  
  	}

	//cette methode permet de supprimer une phrase
	public void supprimerUnePhrase(String nomPatient, String phrase) {
		db.execSQL("DELETE FROM t_conversation WHERE nomPatient = '"+ nomPatient +"' AND phrase = '"+phrase+"'");  
	}

	//cette methode permet de compter les valeurs contenues dans la table t_conversation
	public long  compterValeurs_t_conversation(){
		long nbVal= DatabaseUtils.queryNumEntries(db,"t_conversation");   				//Fonction qui retourne le nombre de mesures dans la BDD
		return nbVal;
	}

	//cette methode permet d'inserer les donn�es dans la table t_conversation
	public long insererDonnees_t_conversation(String nomPatient, String dateCourante, String phrase){
		ContentValues values = new ContentValues();
				values.put("nomPatient", nomPatient);
				values.put("dateCourante", dateCourante);
				values.put("phrase", phrase);
			return db.insert("t_conversation", null, values);
	}

	//cette methode permet de lire les mesures de la table t_conversations
	public Cursor lireMesures_t_conversation(){
		return db.query("t_conversation", new String[]{ "_id", "nomPatient", "dateCourante", "phrase"}, null, null, null, null, null);
	}


	//cette methode permet d'obtenir la liste des patients
	public ArrayList<String> getListePatients() {
		       
		ArrayList<String> listePatients = new ArrayList<String>();
		Cursor cursor = lireMesures_t_conversation();
		
		if (cursor.moveToFirst()) {
	       do {
	    	   if (listePatients.contains(cursor.getString(1))) {
	    		   	//System.out.println(cursor.getString(1)+" existe deja");
	    		} else {
			    	listePatients.add(cursor.getString(1));
	    		}
	    	   
	       } while (cursor.moveToNext());
		}
		
		Collections.sort(listePatients);

		if (listePatients.size() == 0){
			Toast.makeText(context, "Aucun patient dans la base.", Toast.LENGTH_LONG).show();
			Toast.makeText(context, "Appuyer sur la touche menu pour en cr�er un nouveau.", Toast.LENGTH_LONG).show();
		}	
		
    	return listePatients;
   }

	//cette methode permet d'obtenir la liste des phrases associ�es a un patient
	public ArrayList<String> getListePhrases(String nomDuPatient) {
	       
		ArrayList<String> listePhrases = new ArrayList<String>();
		Cursor cursor = lireMesures_t_conversation();
		
		if (cursor.moveToFirst()) {
	       do {
	    	   if(nomDuPatient.equals(cursor.getString(1)))
	    	   {
	    		   if(cursor.getString(3).startsWith("-"))
		    	   {
	    			 //System.out.println(cursor.getString(1) + " a dit : "+ cursor.getString(3));
	    			 
		    	   }
	    		   listePhrases.add(cursor.getString(3));
	    	   }
	    		
	       } while (cursor.moveToNext());
		}
		return listePhrases;
	}
}